#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
请设计一个带参数的通用装饰器timeit它可作用于任何函数上，并打印该函数的执行时间并支持时间单位转换。注意代码规范，请在合适的位置添加注释
1)装饰器支持无参数也支持带一个参数
2)实现一个通用装饰器，它可以作用在任何函数上
3)装饰器参数名unit 取值ms 或 s。当值为ms时打印函数的执行时间单位为毫秒。当值为s时打印执行时间单位为秒
4)当不传参数时默认为ms
5)实现带不定长参数并有返回值的my_sub函数并用装饰器装饰。功能：计算所有传入参数的差。 例：my_sub(1,2,5,a=1,b=2)
6)调用函数并能打印出正确结果和正确的执行时间
装饰器示例：
@timeit(unit=’ms’)
@timeit(unit=’s’)
@timeit()
'''
import time

def timeit(unit="ms"):
    def decorate(fn):
        def wrapper(*args, **kwargs):
            t1 = time.time()
            ret = fn(*args, **kwargs)
            t2 = time.time()
            t = t2 - t1 
            if unit == 's':
                print(f"共用时{t}s")
            elif unit == 'ms':
                print(f"共用时{t / 1000.0}ms")
            return ret
        return wrapper
    return decorate


@timeit(unit="s")
def my_sub(*args, **kwargs):
    cnt = 0
    nums = list(args)
    for k, v in kwargs.items():
        nums.append(v)
    for n in nums:
        cnt -= n
    return cnt


print(my_sub(1,2,5,a=1,b=2))
